/*
    TypeScript变量声明
 */

/**
 * 变量是一种使用方便的占位符，用于引用计算机内存地址。我们可以把变量看做存储数据的容器。
 * TypeScript 变量的命名规则：
 *      变量名称可以包含数字和字母。
 *      除了下划线 _ 和美元 $ 符号外，不能包含其他特殊字符，包括空格。
 *      变量名不能以数字开头。
 * 变量使用前必须先声明，我们可以使用 var 来声明变量。
 * 我们可以使用以下四种方式来声明变量：
 */
//声明变量的类型及初始值： var [变量名] : [类型] = 值;
// Todo 注意：变量不要使用 name 否则会与 DOM 中的全局 window 对象下的 name 属性出现了重名。

var username: string = 'ryan';
//声明变量的类型及但没有初始值，变量值会设置为 undefined：
var username1: string;
//声明变量并初始值，但不设置类型类型，该变量可以是任意类型：
var username2 = 'ryan';
//声明变量没有设置类型和初始值，类型可以是任意类型，默认初始值为 undefined：
var username3;

/**
 * 变量作用域
 * 变量作用域指定了变量定义的位置。程序中变量的可用性由变量作用域决定。
 * TypeScript 有以下几种作用域：
 *      全局作用域 − 全局变量定义在程序结构的外部，它可以在你代码的任何位置使用。
 *      类作用域 − 这个变量也可以称为 字段。类变量声明在一个类里头，但在类的方法外面。 该变量可以通过类的对象来访问。类变量也可以是静态的，静态的变量可以通过类名直接访问。
 *      局部作用域 − 局部变量，局部变量只能在声明它的一个代码块（如：方法）中使用。
 */
var global_num = 12;          // 全局变量
class Numbers {
    num_val = 13;             // 类变量
    static sval = 10;         // 静态变量

    storeNum():void {
        var local_num = 14;    // 局部变量
    }
}
console.log("全局变量为: "+global_num);
console.log(Numbers.sval);   // 静态变量
var obj = new Numbers();
console.log("类变量: "+obj.num_val);
//如果我们在方法外部调用局部变量 local_num，会报错